package com.cskaoyan.javase.io._7exercise;

import java.io.*;
import java.util.Arrays;
import java.util.Random;

/**
 * 给出一个人员名单txt文本文件,每一行放一个人名,作为抽奖名单,执行程序一次就抽奖一次,将获奖名单打印到另一个文件中,同时在抽奖名单中删除这个人名
 *
 * @since 10:13
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) throws IOException {
        // 1.读文件获取所有的抽奖人员名单,这个名单最好一个String数组,所以用缓冲字符输入流来读数据
        BufferedReader in = new BufferedReader(new FileReader("抽奖名单.txt"));
        String[] namesNoPrize = new String[6];
        String name;
        int index = 0;
        while ((name = in.readLine()) != null) {
            namesNoPrize[index] = name;
            index++;
        }
        System.out.println("现在开始抽奖,抽奖的人员名单是:" + Arrays.toString(namesNoPrize));
        // 2.利用随机数,随机获取一个获奖人员
        // [0,1)的一个浮点数,获取随机的合法下标 *6 --> [0,6) 取整以后就是0-5的整数
        int win = (int) (Math.random() * 6);
        // 3.将这个获奖人员的姓名写到获奖名单文件中,用字符打印流来完成这个操作
        PrintWriter writer = new PrintWriter(new FileOutputStream("获奖名单.txt", true));
        System.out.println("获奖的人是:" + namesNoPrize[win]);
        writer.println(namesNoPrize[win]);
        writer.flush();
        writer.close();

        // 4.如何去删除抽奖名单中的这个获奖人员呢? 删除是不能直接做到的,但是可以重写一份,去掉这个获奖的人
        String[] newNamesNoPrize = new String[5];
        int newIndex = 0;
        for (int i = 0; i < namesNoPrize.length; i++) {
            if (i == win) {
                continue;
            }
            newNamesNoPrize[newIndex] = namesNoPrize[i];
            newIndex++;
        }
        // 然后将新数组重新写到抽象名单中,要覆盖原先的文件
        PrintWriter writer2 = new PrintWriter("抽奖名单.txt");
        for (String s : newNamesNoPrize) {
            writer2.println(s);
        }
        writer2.flush();
        writer2.close();

    }
}
